home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Diamond Collection
/
The Diamond Collection (Software Vault)(Digital Impact).ISO
/
cdr44
/
frasrc19.zip
/
ANT.C
< prev
next >
Wrap
C/C++ Source or Header
|
1994-12-10
|
4KB
|
160 lines
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "prototyp.h"
#include "helpdefs.h"
void setwait(long *wait)
{
char msg[80];
int kbdchar;
for(;;)
{
sprintf(msg,"Delay %4ld",*wait);
while(strlen(msg) < 15)
strcat(msg," ");
msg[15] = 0;
showtempmsg((char far *)msg);
kbdchar = getakey();
switch(kbdchar)
{
case RIGHT_ARROW_2:
case UP_ARROW_2:
(*wait) += 100;
break;
case RIGHT_ARROW:
case UP_ARROW:
(*wait) += 10;
break;
case DOWN_ARROW_2:
case LEFT_ARROW_2:
(*wait) -= 100;
break;
case LEFT_ARROW:
case DOWN_ARROW:
(*wait) -= 10;
break;
default:
cleartempmsg();
return;
}
if(*wait < 0)
*wait = 0;
}
}
int ant(void)
{
int oldhelpmode;
long maxpts;
long count;
int kbdchar;
long step;
long wait;
char rule[256];
int numcolors;
static int x,y;
int color;
int direction=0; /* 0=left 1=up 2=right 3=down */
oldhelpmode = helpmode;
helpmode = ANTCOMMANDS;
sprintf(rule,"%.17g",param[0]);
wait = step = abs(orbit_delay);
maxpts = (long)param[1];
maxpts = labs(maxpts);
if(step == 1)
wait = 0;
else
step = 0;
count = 0;
numcolors = strlen(rule);
if(numcolors == 0)
{
stopmsg(0,"Empty rule string");
goto exit_ant;
}
for(color=0;color<numcolors;color++)
{
if(rule[color] != '1')
rule[color] = '0';
rule[color] = (char)(rule[color] - (int)'0');
}
x = xdots/2;
y = ydots/2;
for(;;)
{
color = getcolor(x,y);
putcolor(x,y,15);
kbdchar=keypressed();
if(kbdchar || step)
{
int done = 0;
if(kbdchar == 0)
kbdchar = getakey();
switch(kbdchar)
{
case SPACE:
step = 1 - step;
break;
case ESC:
done = 1;
break;
case RIGHT_ARROW:
case UP_ARROW:
case DOWN_ARROW:
case LEFT_ARROW:
case RIGHT_ARROW_2:
case UP_ARROW_2:
case DOWN_ARROW_2:
case LEFT_ARROW_2:
setwait(&wait);
break;
default:
done = 1;
break;
}
if(done)
goto exit_ant;
if(keypressed())
getakey();
}
if(wait > 0 && step == 0)
sleepms(wait);
if(rule[color%numcolors])
direction++;
else
direction--;
if(direction < 0)
direction = 3;
else if(direction > 3)
direction = 0;
putcolor(x,y,++color);
switch(direction)
{
case 0:
x--;
break;
case 1:
y--;
break;
case 2:
x++;
break;
case 3:
y++;
break;
}
if(x < 0 || x >= xdots || y < 0 || y >= ydots)
break;
if(++count > maxpts)
break;
}
exit_ant:
helpmode = oldhelpmode;
return(0);
}